#include "tablemodel.h"
#include <QColor>

#define CHECK_BOX_COLUMN 0
#define File_PATH_COLUMN 1

TableModel::TableModel(QObject *parent)
    :QAbstractTableModel(parent)
{

}

int TableModel::rowCount(const QModelIndex &) const
{
    return m_recordList.count();
}


int TableModel::columnCount(const QModelIndex &) const
{
    return 2;
}

//主要用于更新数据，刷新界面。
void TableModel::updateData(QList<FileRecord> recordList)
{
    m_recordList = recordList;
    beginResetModel();
    endResetModel();
}


//用来设置数据，根据角色（颜色、文本、对齐方式、选中状态等）判断需要设置的内容。
bool TableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if (!index.isValid())
        return false;
    int nColumn = index.column();
    FileRecord record = m_recordList.at(index.row());//得到行，得到列表中的数据

    switch (role) {
    case Qt::DisplayRole:
        if (nColumn == File_PATH_COLUMN) {
            record.strFilePath = value.toString();

            m_recordList.replace(index.row(),record);
            emit dataChanged(index,index);//When reimplementing the setData() function, this signal must be emitted explicitly.
            return true;
        }
        break;
    case Qt::CheckStateRole :
    case Qt::UserRole:
        if (nColumn == CHECK_BOX_COLUMN) {
            record.bChecked = value.toBool();//记录值，用于data函数中的显示使用
//            record.bChecked = (value.toInt() == Qt::Checked);

            m_recordList.replace(index.row() , record);
            emit dataChanged(index,index);
            return true;
        }
    default:
        return false;
        break;
    }

    return false;
}

//用来显示数据，根据角色（颜色、文本、对齐方式、选中状态等）判断需要显示的内容。
QVariant TableModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();
    int nRow = index.row();
    fileRecord record = m_recordList.at(nRow);

    int nColumn = index.column();
    switch (role) {
    case Qt::TextColorRole://文本颜色
        return QColor(Qt::white);
    case Qt::TextAlignmentRole://文本排列
        return QVariant(Qt::AlignHCenter | Qt::AlignVCenter);
    case Qt::DisplayRole://显示
        if (nColumn == File_PATH_COLUMN)
            return record.strFilePath;;
        return "";
    /*case Qt::CheckStateRole://选中
        if (nColumn == CHECK_BOX_COLUMN)
            return record.bChecked ? Qt::Checked : Qt::Unchecked;*/
    case Qt::UserRole:
        if (nColumn == CHECK_BOX_COLUMN)
            return record.bChecked;
    default:
        return QVariant();
    }

      return QVariant();
}


//用来显示水平/垂直表头的数据。
QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    switch (role) {
    case Qt::TextAlignmentRole:
        return QVariant(Qt::AlignHCenter | Qt::AlignVCenter);
    case Qt::DisplayRole:
        if (orientation  == Qt::Horizontal) {
            if (section == CHECK_BOX_COLUMN)
                return QStringLiteral("状态");
            if (section == File_PATH_COLUMN)
                return QStringLiteral("文件路径");
        }else {
            return QStringLiteral("1");
        }
    default:
        return QVariant();
    }

    return QVariant();
}

//用来设置单元格的标志（可用、可选中、可复选等）。
Qt::ItemFlags TableModel::flags(const QModelIndex &index) const
{
    if (!index.isValid())
        return QAbstractItemModel::flags(index);
    Qt::ItemFlags _flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
//    if (index.column() == CHECK_BOX_COLUMN)
//        _flags |= Qt::ItemIsUserCheckable;

    return _flags;
}







